#ifndef GOALKEEPER_OWNED_STATES_H
#define GOALKEEPER_OWNED_STATES_H
//------------------------------------------------------------------------
//
//  Name:   MinerOwnedStates.h
//
//  Desc:   All the states that can be assigned to the Miner class.
//          Note that a global state has not been implemented.
//
//  Author: Mat Buckland 2002 (fup@ai-junkie.com)
//
//------------------------------------------------------------------------
#include "OgreRefAppState.h"


//------------------------------------------------------------------------
//
//  In this state the miner will walk to a goldmine and pick up a nugget
//  of gold. If the miner already has a nugget of gold he'll change state
//  to VisitBankAndDepositGold. If he gets thirsty he'll change state
//  to QuenchThirst
//------------------------------------------------------------------------
namespace OgreRefApp
{
    struct ApplicationObject::CollisionInfo;
    class GoalKeeper;
    class SoccerPitch;


    class GlobalKeeperState: public State<GoalKeeper>
    {
    private:

        GlobalKeeperState(){}

    public:

        //this is a singleton
        static GlobalKeeperState* Instance();

        void Enter(GoalKeeper* keeper){}

        void Execute(GoalKeeper* keeper){}

        void Exit(GoalKeeper* keeper){}

        bool OnMessage(GoalKeeper*, ApplicationObject::CollisionInfo&);
    };

//-----------------------------------------------------------------------------

    class TendGoal: public State<GoalKeeper>
    {
    private:

        TendGoal(){}

    public:

        //this is a singleton
        static TendGoal* Instance();

        void Enter(GoalKeeper* keeper);

        void Execute(GoalKeeper* keeper);

        void Exit(GoalKeeper* keeper);

        bool OnMessage(GoalKeeper*, ApplicationObject::CollisionInfo&)
        {
            return false;
        }
    };

//------------------------------------------------------------------------
    class InterceptBall: public State<GoalKeeper>
    {
    private:

        InterceptBall(){}

    public:

        //this is a singleton
        static InterceptBall* Instance();

        void Enter(GoalKeeper* keeper);

        void Execute(GoalKeeper* keeper);

        void Exit(GoalKeeper* keeper);

        bool OnMessage(GoalKeeper*, ApplicationObject::CollisionInfo&)
        {
            return false;
        }
    };

//------------------------------------------------------------------------
    class ReturnHome: public State<GoalKeeper>
    {
    private:

        ReturnHome(){}

    public:

        //this is a singleton
        static ReturnHome* Instance();

        void Enter(GoalKeeper* keeper);

        void Execute(GoalKeeper* keeper);

        void Exit(GoalKeeper* keeper);

        bool OnMessage(GoalKeeper*, ApplicationObject::CollisionInfo&)
        {
            return false;
        }
    };

//------------------------------------------------------------------------
    class PutBallBackInPlay: public State<GoalKeeper>
    {
    private:

        PutBallBackInPlay(){}

    public:

        //this is a singleton
        static PutBallBackInPlay* Instance();

        void Enter(GoalKeeper* keeper);

        void Execute(GoalKeeper* keeper);

        void Exit(GoalKeeper* keeper){}

        bool OnMessage(GoalKeeper*, ApplicationObject::CollisionInfo&)
        {
            return false;
        }
    };
}

#endif;
